package JUC;

import java.util.concurrent.*;
/**
 * 线程池测试
 *
 * */
public class ThreadPoolDemo {

    public static void main(String[] args) {

        // 获得CPU的内核数
        System.out.println(Runtime.getRuntime().availableProcessors());

        ThreadPoolExecutor threadPool = new ThreadPoolExecutor(
                2,   //核心线程数
                5,  //最大线程数
                2L,  //存活时间
                TimeUnit.SECONDS,  //时间单位
                new LinkedBlockingQueue<>(5),  //任务阻塞队列
                Executors.defaultThreadFactory(),   //线程创建工厂
                new ThreadPoolExecutor.DiscardPolicy()  //任务满时的拒绝策略
        );


        try {
            // 模拟有6,7,8,9,10个顾客过来银行办理业务，观察结果情况
            // 最大容量为：maximumPoolSize + workQueue = 最大容量数

            for (int i = 1; i <= 19; i++) {
                //execute用来执行不需要返回结果的线程
                threadPool.execute(() -> {
                    System.out.println(Thread.currentThread().getName() + " 办理业务");
                });
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            threadPool.shutdown(); // 用完记得关闭
        }
    }
}


